package com.xiaojiezhu.netty.base.demo.pojo;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelOutboundHandlerAdapter;
import io.netty.channel.ChannelPromise;

/**
 * 作者 zxj<br>
 * 时间 2017/7/14 15:03
 * 说明 ...
 */
public class TimerEncoder extends ChannelOutboundHandlerAdapter {
    /**
     *我们不需要调用 cxt.flush()。因为处理器已经单独分离出了一个方法 void flush(ChannelHandlerContext cxt),
     * @param ctx
     * @param msg
     * @param promise 通过 ChannelPromise，当编码后的数据被写到了通道上 Netty可以通过这个对象标记是成功还是失败
     * @throws Exception
     *
     * 也有一个更简洁的类  @link {@link TimerEncoder2}
     */
    @Override
    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
        UnixTime time = (UnixTime) msg;
        ByteBuf buf = ctx.alloc().buffer(4);
        buf.writeInt((int)time.getValue());
        ctx.write(buf,promise);
    }
}
